#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "commandhex.h"

#include <QStackedWidget>
#include <iostream>

using namespace std;


MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 初始化页面
    initPages();

    // 连接信号和槽
    setupConnections();

    // 初始化串口
    initSerialPort();
}

/**
 * 初始化页面
 */
void MainWindow::initPages()
{
    // 自由刺激
    freeStimulatePage = new FreeStimulatePage(this);

    // 自由刺激 - 参数设置
    freeStimulateParamsPage = new free_stimulate_params_page(this);

    // 页面栈
    stackedWidget = new QStackedWidget(this);
    stackedWidget->addWidget(ui->centralwidget); // 索引 0
    stackedWidget->addWidget(freeStimulatePage); // 索引 1
    stackedWidget->addWidget(freeStimulateParamsPage); // 索引 2
    setCentralWidget(stackedWidget);
}

/**
 * 连接按钮点击信号到槽函数
 */
void MainWindow::setupConnections()
{
    // 首页 - 自由刺激
    connect(ui->btnFreeStimulate, &QPushButton::clicked, this, &MainWindow::onFreeStimulationClick);

    // 自由刺激 - 参数设置
    connect(freeStimulatePage, &FreeStimulatePage::requestToParamsPage, this, &MainWindow::onFreeStimulateParamsClick);

    // 自由刺激 - 参数设置 - 返回
    connect(freeStimulateParamsPage, &free_stimulate_params_page::requestToBack, this, &MainWindow::onFreeStimulateParamsBack);

    // 自由刺激 - 返回按钮
    connect(freeStimulatePage, &FreeStimulatePage::requestBackToMainPage, this, &MainWindow::onBackToMainPage);
}

/**
 * 初始化串口
 * @brief MainWindow::initSerialPort
 */
void MainWindow::initSerialPort()
{
    bool isOpen = SerialManager::instance()->openPort("COM4", 115200);

    if(isOpen){
        cout << "serialPort init successful" << endl;
    } else {
        cout << "serialPort init failed" << endl;
    }
}

/**
 * 自由刺激
 */
void MainWindow::onFreeStimulationClick()
{
    qDebug() << "自由刺激按钮被点击";
    QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(centralWidget());
    if(stackedWidget) stackedWidget->setCurrentIndex(1);
}

/** 自由刺激 -> 参数设置页面
 * @brief MainWindow::onFreeStimulateParamsClick
 */
void MainWindow::onFreeStimulateParamsClick()
{
    qDebug() << "自由刺激 - 参数设置按钮被点击";
    QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(centralWidget());
    if (stackedWidget) stackedWidget->setCurrentIndex(2);
}

/** 参数设置 -> 自由刺激
 * @brief MainWindow::onFreeStimulateParamsBack
 */
void MainWindow::onFreeStimulateParamsBack()
{
    qDebug() << "自由刺激 - 参数设置按钮被点击";
    QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(centralWidget());
    if (stackedWidget) stackedWidget->setCurrentIndex(1);
}

/** 回到首页
 * @brief MainWindow::onBackToMainPage
 */
void MainWindow::onBackToMainPage()
{
    QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(centralWidget());
    if(stackedWidget) stackedWidget->setCurrentIndex(0);

    // 切换到空闲状态
    qDebug() << "发送空闲状态命令：" << CommandHex::command_hex_free.toHex();
    SerialManager::instance()->sendData(CommandHex::command_hex_free);
}

/**
 * 析构函数
 * @brief MainWindow::~MainWindow
 */
MainWindow::~MainWindow()
{
    delete ui;
}
